package com.lyz.dataStructure.dome;/**
 * @Author:759057893@qq.com Lyz
 * @Date: ${Date} 13:49
 * @Description:
 **/

/**
 *@Author:759057893@qq.com Lyz
 *@Date: 2019/7/13 13:49
 *@Description:
 **/
public class StringToDouble {

    public static void main(String[] args) {
        String s = "-12.25";
        System.out.println(toDouble(s));
    }

    public static double toDouble(String str){
        if(str==null||"".equals(str.trim())){
            return  0;
        }
        str =str.trim();
        boolean isMinus=false;
        if(str.startsWith("-")){
            //是负数
            isMinus =true;
            //去除负号
            str =str.substring(1);//从第一个字符截取，去除前面的负号
        }
        //整个字符串的直面值结果
        double result =0;
        //先把字符串中的小数，以小数点分割切开成两部分小数（注意正则）
        String[] strNum = str.split("\\.");

        //先处理整数的部分,转换成int数字
        int intNumResult = 0;
        for(int i=0;i<strNum[0].length();i++){
            int val = strNum[0].charAt(i) -'0';
            if(val<0||val>9){
                //非数字
                intNumResult /=10;
                continue;
            }
            //获得当前字面意思的整数值，然后乘以当前位的进制值
            intNumResult =intNumResult+val*makeInteger(strNum[0].length()-i-1);
        }

        //存储小数的部分
        int decimalNum = 0;
        if(strNum.length>1){
            //记录非法字符数
            int numNan = 0;
            for(int i =0;i<strNum[1].length();i++){
               int val = strNum[1].charAt(i)-'0';
                if(val<0||val>9){
                    //非数字
                    decimalNum /=10;
                    numNan++;
                    continue;
                }
                decimalNum = decimalNum+ val*makeInteger(strNum[1].length()-i-1);
            }
            result = decimalNum*makeInteger1(strNum[1].length()-numNan);
        }

        result = intNumResult+result;
        //加上数值负号
        if(isMinus){
            result*=-1;
        }
        return result;

    }
    /**
     * 构造10的n倍数
     *
     * @return
     */
    public static int makeInteger(int n){
        int i =1;
        for(int j =0;j<n;j++){
            i*=10;
        }
        return i;
    }
    public static double makeInteger1(int n){
        double i =1;
        for(int j =0;j<n;j++){
            i/=10;
        }
        return i;
    }

}
